Amazon Linux 2023にbpftuneをインストールする
Introduction
先日、OracleがLinuxカーネルのパラメータを自動チューニングするツール「bpftune」をオープンソースで公開という記事をみました。
bpftuneはBPF(Berkeley Packet Filter)という、
Linuxカーネル内のいろいろな機能をフックして
機能拡張可能な仕組みを利用し、継続的にLinuxカーネルの詳細な監視と
自動チューニングを実現しているようです。
今回はこのbpftuneをAmazon Linux 2023にインストールして、
動作を確認してみます。
bpftune?
さきほどもいったように、bpftuneはLinuxカーネルの
パラメータを自動チューニングを提供します。
BPFのオブザーバビリティ機能観を使い、
システムの振る舞いを継続的に監視して調整します。
説明によると、結構細かい粒度でチューニング可能みたいです。
そして、チューニングできる項目はNeighbourテーブルや
Routeテーブル、TCPバッファやネットワーク名前空間が
監視対象になっています。
また、pluginを独自に実装して任意の監視や
チューニングを行うこともできるそうな。
Environment
今回はAmazon Linux 2023のAMIをつかって
EC2インスタンスを起動して試してみました。
Try
まず、Amazon Linuxのインスタンスを起動してSSHログインします。
その後必要パッケージをインストールしていきましょう。
% sudo yum update % sudo yum install -y openssl-devel git gcc gcc-c++ % sudo yum -y install bpftool clang libcap-devel libbpf-devel libnl3-devel
bpftuneのGitリポジトリをcloneします。
% git clone https://github.com/oracle-samples/bpftune.git
Makeする。
% cd bpftune/ % make ; sudo make install
インストールが完了したらbpftune -sコマンドを実行してみます。
bpftuneが現在のLinuxカーネルに対応していれば、
↓のような表示がでます。
% sudo bpftune -s bpftune: bpftune works fully bpftune: bpftune supports per-netns policy (via netns cookie)
bpftuneを起動します。
psで見てみると、正常に起動しているみたいです。
% sudo service bpftune start Redirecting to /bin/systemctl start bpftune.service % ps -ax | grep bpftune 43742 ? Ssl 0:00 /usr/sbin/bpftune
実際にbpftuneが動いているのか確認します。
適当なリポジトリをgit cloneしたあとにjournalctlでログを見てみます。
% git clone https://github.com/curl/curl.git #適当なリポジトリをcloneしてみる ・・・ % sudo journalctl /usr/sbin/bpftune bpftune[43742]: Scenario 'need to increase TCP buffer size(s)' occurred for tunable 'net.ipv4.tcp_rmem' in global ns. Need to increase buffer size(s) to maximize throughput bpftune[43742]: Due to need to increase max buffer size to maximize throughput change net.ipv4.tcp_rmem(min default max) from (4096 131072 19200000) -> (4096 131072 24000000)
動いてるっぽいのがわかります。
また、ip netnsでネットワーク名前空間を追加したときも動いています。
% sudo ip netns add bofrtunetest-route ・・・ % sudo journalctl /usr/sbin/bpftune bpftune[43742]: Scenario 'netns created' occurred for tunable 'Network namespace' in global ns. network namespace creation bpftune[43742]: netns created (cookie 4098)
ちなみに、Dockerでコンテナを起動した場合にも動きます。
Summary
bpftuneを試してみました。
daemonとして動き、自動でカーネルをチューニングしてくれるので、
いちいち設定をしなくてもOK。
pluginで独自拡張も可能みたいですし、なかなか良さそうですね。